
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>MySQL 中的死锁如何解决? - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>MySQL 中的死锁如何解决? - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在 Kubernetes 中，Ingress 的核心作用是什么？它主要解决了什么问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Ingress 的核心作用是管理从集群外部到集群内部 Service 的 HTTP 和 HTTPS 路由。它主要解决了当有大量服务需要对外暴露时，为每个服务都创建一个 LoadBalancer 会非常昂贵且管理复杂的问题，通过一个统一的入口点实现流量的智能分发。</div>
          </div>
          <div class="card-source">来源: 什么是 Ingress？</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Ingress 资源和 Ingress Controller 之间是何种关系？为什么说仅创建 Ingress 资源本身是无效的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Ingress 资源是一个定义路由规则（如主机名、路径）的 API 对象，它本身不具备处理流量的能力。Ingress Controller 是一个实际运行的组件（通常是反向代理，如 NGINX），它负责监听 Ingress 资源的变化，并根据这些规则来配置自身以实现流量转发。因此，如果没有 Ingress Controller 来解析并执行这些规则，Ingress 资源就是一纸空文，不起任何作用。</div>
          </div>
          <div class="card-source">来源: Ingress Controller</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">对比</div>
          <div class="card-question">相较于 NodePort 和 LoadBalancer 类型的 Service，使用 Ingress 暴露服务有哪些关键优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">对比</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Ingress 的关键优势在于它工作在 OSI 模型的第七层（应用层），提供了更灵活的路由能力。具体优势包括：1. **成本效益**：通过单一入口点（一个公网IP）管理多个服务的流量，避免为每个服务创建昂贵的 LoadBalancer。2. **高级路由**：支持基于主机名（域名）和 URL 路径的路由。3. **TLS/SSL 终止**：可以集中处理和管理 TLS 证书，简化了 HTTPS 配置。</div>
          </div>
          <div class="card-source">来源: Ingress 与 Service 的对比</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在 Ingress 规则中，`pathType` 字段支持哪三种类型？它们各自的匹配逻辑是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Ingress 的 `pathType` 支持三种类型：<br>1.  **`Exact`**: 精确匹配，请求的 URL 路径必须与规则中的路径完全相同。<br>2.  **`Prefix`**: 前缀匹配，请求的 URL 路径以规则中的路径为前缀即可匹配。<br>3.  **`ImplementationSpecific`**: 匹配逻辑由具体的 Ingress Controller 实现决定，行为不固定。</div>
          </div>
          <div class="card-source">来源: Ingress 资源详解 - 路径类型（Path Types）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">如何在 Ingress 资源中配置 TLS/SSL 终止？需要引用哪种类型的 Kubernetes 对象？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">要配置 TLS/SSL 终止，需要在 Ingress 的 `spec` 中添加 `tls` 字段。该字段包含一个列表，每个条目都指定了 `hosts` (应用该证书的域名列表) 和 `secretName`。这个 `secretName` 必须引用一个类型为 `kubernetes.io/tls` 的 Secret 对象，该 Secret 对象中包含了 TLS 证书和私钥。</div>
          </div>
          <div class="card-source">来源: Ingress 资源详解 - TLS/SSL 终止</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Ingress 中的“默认后端”（Default Backend）的作用是什么？它在什么情况下会被触发？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">“默认后端”是一个备用服务，用于处理所有与 Ingress 中任何规则都不匹配的入站请求。当一个请求的主机名或路径无法在 `rules` 列表中找到任何匹配项时，该请求就会被转发到这个预先配置的默认后端 Service。这通常用于返回一个自定义的 404 页面。</div>
          </div>
          <div class="card-source">来源: Ingress 资源详解 - 默认后端（Default Backend）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">请简述一个外部用户的 HTTP 请求通过 Ingress 到达目标 Pod 的完整工作流程。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 用户的 DNS 请求将域名解析到 Ingress Controller 的外部 IP 地址。<br>2. 用户的 HTTP 请求到达 Ingress Controller。<br>3. Ingress Controller 检查请求的主机名（Host header）和路径。<br>4. Ingress Controller 根据其加载的 Ingress 资源规则，找到与请求匹配的规则。<br>5. Ingress Controller 将请求代理转发到规则中指定的后端 Service。<br>6. Service 将请求通过其内部的负载均衡机制路由到后端一个健康的 Pod 上。</div>
          </div>
          <div class="card-source">来源: 工作流程</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">为什么将 Ingress 和 Ingress Controller 的角色分离设计是一种好的实践？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">这种分离设计遵循了 Kubernetes 的声明式 API 和控制循环模式。开发者（用户）只需通过 Ingress 资源声明“期望的状态”（路由规则），而无需关心具体如何实现。Ingress Controller 作为控制器，负责将“期望状态”转变为“实际状态”（配置反向代理）。这种解耦使得 Ingress 的实现可以多样化（如 NGINX, HAProxy, Traefik 等），用户可以根据需求选择不同的 Controller，而无需改变他们的 Ingress 资源定义。</div>
          </div>
          <div class="card-source">来源: 总结</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">一个 Ingress 资源是否可以同时定义基于不同主机名（hosts）的路由规则？如果可以，请举例说明。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">是的，一个 Ingress 资源可以在其 `spec.rules` 列表中定义多个条目，每个条目可以对应一个不同的 `host`。例如，同一个 Ingress 对象可以同时包含 `host: foo.bar.com` 的规则将流量导向 `service-foo`，以及 `host: bar.foo.com` 的规则将流量导向 `service-bar`，从而实现基于虚拟主机的路由。</div>
          </div>
          <div class="card-source">来源: Ingress 资源详解 - 规则（Rules）</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
